1
从线程到程序实例的过渡
AI023Lesson 4
00:00

在 Triton 中,执行的基本单位从 CUDA 标量线程转变为 程序实例。这代表了 GPU 线程块的一个抽象,其中单个实例同时处理一个向量化“块”的元素。

1. 程序实例的身份

每个执行单元通过以下方式获取其身份 pid = tl.program_id(axis=0)。可以将其想象为一个 仓库叉车 (程序实例)搬运一个 托盘 (块)上的 128 个箱子,而单个工人(CUDA 线程)只搬运一个箱子。

2. Triton 与 PyTorch 张量的对比

理解语义差异对于内存管理至关重要:

  • PyTorch 张量: 一个位于主机端的 Python 对象,封装了显存存储、步长和元数据。
  • Triton 张量: 一个编译器级别的对象,表示驻留在 寄存器或 SRAM中的值或指针。
PyTorch 视图
指向连续全局内存的 Python 对象。
Triton 视图
编译器寄存器内的二维/一维数据块。

3. SPMD 性质

Triton 采用 单程序多数据(SPMD) 模式。每个程序实例都执行 完全相同的 代码。分歧仅在逻辑使用 pid 来计算特定的内存偏移时才会发生。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>